// 给定一个字符串数组，将字母异位词组合在一起。可以按任意顺序返回结果列表。

// 字母异位词指字母相同，但排列不同的字符串。

// 看了题解，使用map作为判断是否为字母异位词很巧妙

// 执行用时：
// 36 ms
// , 在所有 C++ 提交中击败了
// 68.20%
// 的用户
// 内存消耗：
// 19 MB
// , 在所有 C++ 提交中击败了
// 72.30%
// 的用户

#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<unordered_map>
#include<set>
using namespace std;

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,vector<string>> map1;
        for(int i=0;i<strs.size();i++){
            string key=strs[i];
            sort(key.begin(),key.end());
            map1[key].push_back(strs[i]);
        }
        vector<vector<string>> res;
        for(auto it=map1.begin();it!=map1.end();it++){
            res.push_back(it->second);
        }
        return res;
    }
};